package com.t.bricks.bussiness.controller.replyexercise;

import io.swagger.annotations.Api;

import java.util.List;
import java.util.Map;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.t.bricks.bussiness.controller.common.BaseController;
import com.t.bricks.bussiness.db.entity.replyexercise.ReplyExercise;
import com.t.bricks.bussiness.model.replyexercise.ConditionReplyExercise;
import com.t.bricks.bussiness.service.common.CommonService;
import com.t.bricks.model.MsgEmity;
import com.t.bricks.utils.modules.web.FindByPageParam;

@RestController
@Api(value="回复练习", tags={"回复练习操作接口"})
@RequestMapping("/reply/exercise/")
public class ReplyExerciseController extends BaseController<CommonService, ReplyExercise, ConditionReplyExercise> {

	/**
	 * 控制操作,首位9不参与用6个数代表开关,0为不限制,1为限制
	 * 6个数的控制分别是:删除、修改、查询、导出、统计、步骤值可逆
	 * 其中前5个为'是否仅创建者可操作'后续为其它控制开关
	 */
	protected int enableTag = 9000001;

	/**
	 * 设置 检查待新增内容是否存在重复数据(多字段组合重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatCombination成员,若返回null则不进行重复校验
	 */
	@Override
	protected List<String> setCheckRepeatCombination() {
		return null;
	}

	/**
	 * 设置 检查待新增内容是否存在重复数据(单独字段重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatAlone成员,若返回null则不进行重复校验
	 */
	@Override
	protected Map<String, Integer> setCheckRepeatAlone() {
		return null;
	}

	/**
	 * 删除数据
	 * @param iId 
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/del")
	public MsgEmity del(Integer iId) {
		return super.del(iId);
	}

	/**
	 * 新增数据
	 * @param replyExercise 回复练习实体对象
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/add")
	public MsgEmity add(@RequestBody ReplyExercise replyExercise) {
		return super.add(replyExercise);
	}

	/**
	 * 修改数据
	 * @param replyExercise 回复练习实体对象
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/edit")
	public MsgEmity edit(@RequestBody ReplyExercise replyExercise) {
		return super.edit(replyExercise);
	}

	/**
	 * 根据记录编号取对象
	 * @param iId 
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/find/id")
	public MsgEmity findById(Integer iId) {
		return super.findById(iId);
	}

	/**
	 * 根据关键值取对象集合
	 * @param replyExercise 回复练习实体对象
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/find/key")
	public MsgEmity findByKey(@RequestBody ReplyExercise replyExercise) {
		return super.findByKey(replyExercise);
	}

	/**
	 * 根据记录编号查询符合分页数据的某条记录
	 * @param iId 
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/find/page/row")
	public MsgEmity findByPageRow(Integer iId) {
		return super.findByPageRow(iId);
	}

	/**
	 * 查询分页数据
	 * @param findByPageParam 分页查询条件组合类
	 * 结构参考: {"page": 分页请求信息对象, "orders": 排序信息对象集合, "sLikeStr": 全文检索, "condition": 查询条件对象}
	 * @return MsgEmity 返回查询结果
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/find/page")
	public MsgEmity findByPage(@RequestBody FindByPageParam<ConditionReplyExercise> findByPageParam) {
		return super.findByPage(findByPageParam);
	}
	
	/**
	 * 创建Excel文件
	 * @param findByPageParam 分页查询条件组合类,注意:分页信息将被抛弃
	 * 结构参考:  {"page": 分页请求信息对象(被抛弃), "orders": 排序信息对象集合, "sLikeStr": 全文检索, "condition": 查询条件对象}
	 * @return MsgEmity 返回结构中data为创建的经过压缩的Excel内容,接收端需要进行解压,msg为文件名
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/export")
	public ResponseEntity<byte[]> export(@RequestBody FindByPageParam<ConditionReplyExercise> findByPageParam) {
		return super.export(findByPageParam);
	}

}
